#include <iostream>
#include <vector>
#include <functional>
#include "log.hpp"
#include "ThreadPool.hpp"

using namespace MyLog;
using namespace ThreadPoolModule;

using task_t = std::function<void()>;
void Download()
{
    std::cout << "下载任务..." << std::endl;
}
void UpLoad()
{
    std::cout << "上传任务..." << std::endl;
}
void tgz()
{
    std::cout << "压缩任务..." << std::endl;
}

int main()
{
    // 注册任务
    std::vector<task_t> task;
    task.emplace_back(Download);
    task.emplace_back(UpLoad);
    task.emplace_back(tgz);

    int count = 5;
    while(count--){
        ThreadPool<task_t>::Getinstance()->emplace(task[count % task.size()]);
        sleep(1);
    }

    ThreadPool<task_t>::Getinstance()->Stop();
    ThreadPool<task_t>::Getinstance()->Join();
    return 0;
}



//int main()
//{
//    // 注册任务
//    std::vector<task_t> task;
//    task.emplace_back(Download);
//    task.emplace_back(UpLoad);
//    task.emplace_back(tgz);
//
//   // 创建线程池
//   ThreadPool<task_t> tp; 
//   sleep(3);
//
//   // 添加任务
//   for(int i=0; i<10; i++)
//   {
//        sleep(1);
//        tp.emplace(task[i % task.size()]);
//   }
//
//   sleep(3);
//
//   // 终止线程池
//   tp.Stop();
//
//   // 回收所有线程
//   tp.Join();
//
//    return 0;
//}



//int main()
//{
//    ThreadPool<int> tp;
//    //sleep(100);
//    sleep(5);
//    tp.Stop();
//    sleep(2);
//    tp.Join();
//    return 0;
//}


//int main()
//{
//    // 默认刷新策略
//    LOG(loglevel::DEBUG) << "test for #define";
//    LOG(loglevel::INFO) << "test for #define";
//    LOG(loglevel::WARINING) << "test for #define";
//    LOG(loglevel::ERROR) << "test for #define";
//    LOG(loglevel::FATAL) << "test for #define";
//
//    //Glogger.UseFileLogStrategy();
//    USE_FILE_LOG_STARATRGY;
//    LOG(loglevel::DEBUG) << "test for #define";
//    LOG(loglevel::INFO) << "test for #define";
//    LOG(loglevel::WARINING) << "test for #define";
//    LOG(loglevel::ERROR) << "test for #define";
//    LOG(loglevel::FATAL) << "test for #define";
//    return 0;
//}



// test for log
// 基础调用方式
//int main()
//{
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//    Glogger(loglevel::DEBUG, "main.cc", 9) << "test logger" << " 1" ;
//}



// test for fflush
//int main()
//{
//    consolelogstrategy cs;
//    cs.synclog("hello world");
//
//    filelogstrategy fs;
//    fs.synclog("hello filesystem");
//    return 0;
//}